package dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Date;
import java.util.Vector;


import modelo.Factura;
import modelo.ItemFactura;
import modelo.Usuario;

public class DAOItemFactura {
	private static DAOItemFactura instancia;
	
	private DAOItemFactura()
	{
		
	}
	public static DAOItemFactura getInstancia()
	{
		if (instancia == null)
			instancia = new DAOItemFactura();
		return instancia;
	}
	
	private static String INSERTitem ="insert into itemsFacturas (nro_factura, descrip, importe) values(?,?,?)";
	private static final String CONSULTAitem="select nro_factura, descrip, importe from itemsitemsFacturas where nro_factura= ?";

	public boolean guardar(Vector<ItemFactura> itemFactura, int nroFac)
	{
			//OBTENGO LA CONEXION
			
			Connection conn= PoolConexiones.getPoolConnection().getConnection();
			
			//VERIFICAMOS QUE LA CONEXION FUE CORRECTA
	
				if(conn!=null){
				  try {
					//CREO UN OBJETO QUE REPRESENTA LA CONSULTA SQL
					 PreparedStatement item;
					 //LE PASO EL INSERT
					 item= conn.prepareStatement(INSERTitem);
					//LE PASAMOS LOS DATOS AL INSERT, EN EL ORDEN
					//QUE DECLARAMOS EN LA CONSTANTE
					 int registrosguardados = 0;	
					 for(int i=0;i< itemFactura.size();i++)
						{
							item.setInt (1, nroFac);
							item.setString(2, itemFactura.elementAt(i).getDescripcion());
							item.setFloat(3, itemFactura.elementAt(i).getImporte());
							registrosguardados = item.executeUpdate();
						}
	
					  //CERRAMOS EL QUERY REPRESENTADO POR S
					  item.close();
							 
					 //VERIFICAMOS QUE HAYA GUARDADO UN REGISTRO y cargamos los items
					if (registrosguardados>0){
						return true;
					}
					else
					{
						return false;
						
					}
				 }
				 catch (SQLException e) {
					 
					 System.err.print("No se pudo guardar el Item Factura");
					 e.printStackTrace();
					 return false;
					 
				}
				finally{
					try{
						//CERRAMOS LA CONEXION
						PoolConexiones.getPoolConnection().releaseConnection(conn);
				
					}
				   
					catch(Exception e){
					   System.err.print("No se pudo cerrar la conexion");
					   e.printStackTrace();
					   return false;
				   }
				}
			
			}//if
		//NO SE PUDO REALIZAR LA CONEXION
		else{
			return false;
		}
	}
	
	public void listar(int nroFactura,Vector<ItemFactura> itemsFacturas ){
		
		
		//OBTENGO LA CONEXION
		Connection conn= PoolConexiones.getPoolConnection().getConnection();
		
		//VERIFICAMOS QUE LA CONEXION FUE CORRECTA
		if (conn!=null){
			try{
				//CREO UN OBJETO QUE REPRESENTA A UN CONSULTA SQL
				PreparedStatement item;
				//ARMO LA CONSULTA
				item=conn.prepareStatement(CONSULTAitem);
				item.setInt (1, nroFactura);
				
				//EJECUTO LA CONSULTA(guardo la cantidad de registros)
				//ResultSet es un cursor, asi que lo empiezo a recorrer
				//Este metodo asegura que nunca es Nulo
				ResultSet result=item.executeQuery();
				
				//Recorre los registro de la consulta
				//hasta llegar al final
				while (result.next())
				{
					String descripcion		=	result.getString("descrip");
					float importe	=	result.getFloat("importe");
					int nroFac = result.getInt("nro_factura");
					//Creo un nuevo Factura, y le paso los datos obtenidos en la
					//consulta realizada.
					ItemFactura auxIFact=new ItemFactura(descripcion,importe, nroFac);
					auxIFact.setNroFac(nroFactura);
					
				//Agrego al vector el Factura obtenido
					itemsFacturas.add(auxIFact);
				}//while
				
				//Cierro el cursor
				result.close();
				
				//CERRAMOS EL QUERY
				item.close();

			}
			catch(Exception e){
				System.err.print("NO SE PUDO REALIZAR LA CONSULTA");
				e.printStackTrace();
			}
			finally{
					//Si se pudo realizar la conexion, realiza la liberacion de 
					//la misma.
					if (conn!=null){
					 PoolConexiones.getPoolConnection().releaseConnection(conn);
					 
				 }
			}
		}
		else{
			System.out.print("NO SE PUDO REALIZAR LA CONEXION");
		}
		
	}
	
	
	
}
